J’importe 2 packages :

On peut se permettre d’ignorer les messages pour le moment, ca concerne des conflits de nom entre differents packages mais c’est pas important.

library(tidyverse)
## ── Attaching packages ──────────────────────────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.2     ✓ purrr   0.3.4
## ✓ tibble  3.0.3     ✓ dplyr   1.0.1
## ✓ tidyr   1.1.1     ✓ stringr 1.4.0
## ✓ readr   1.3.1     ✓ forcats 0.5.0
## ── Conflicts ─────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout

Je charge les données.

df = read_csv("https://raw.githubusercontent.com/apt-42/data_training/main/day00/data.csv")
## Parsed with column specification:
## cols(
##   timestamp = col_datetime(format = ""),
##   longitude = col_double(),
##   latitude = col_double(),
##   altitude = col_double()
## )
head(df)

J’ai initialement fais l’analyse en prenant en compte les 3 variables des données :

J’arrive au meme flag en utilisant 2 methodes differentes :

Methode graphique avec 3 variables

fig = plot_ly(df, 
              x = ~longitude, 
              y = ~latitude, 
              z = ~altitude, 
              hoverinfo = 'text', 
              text = ~timestamp)
fig
## No trace type specified:
##   Based on info supplied, a 'scatter3d' trace seems appropriate.
##   Read more about this trace type -> https://plotly.com/r/reference/#scatter3d
## No scatter3d mode specifed:
##   Setting the mode to markers
##   Read more about this attribute -> https://plotly.com/r/reference/#scatter-mode

On voit qu’il y a un point assez extreme a une altitude assez basse.

En utilisant l’hover, je peux determiner que la date etait :

2021-08-19 a 11h12

Methode numerique avec 3 variables

L’idée ici est de mesurer la distance de tous les points entre eux.

Une fois qu’on a la distance d’un point par rapport a tous les autres points, selectionne la distance la plus proche de chaque point.

On obtient donc un vecteur contenant, pour chaque point, la distance au point le plus proche.

On regarde ensuite quel point est le plus eloigné.

distances = dist(df[-1]) %>%
  as.matrix()
diag(distances) = NA
distanceToClosest = c()
for (r in 1:nrow(distances)) {
  mini = min(distances[r,], na.rm = TRUE)
  distanceToClosest = c(distanceToClosest, mini)
}
df %>% 
  dplyr::mutate(distanceToClosest = distanceToClosest) %>%
  dplyr::arrange(desc(distanceToClosest)) %>%
  head()

On peut donc determiner que le point le plus extreme (flag?) est :

2021-08-19 a 11h12

Methode graphique avec 2 variables

Meme logique qu’au dessus avec 2 variables

fig = plot_ly(df, 
              x = ~longitude, 
              y = ~latitude, 
              hoverinfo = 'text', 
              text = ~timestamp)
fig
## No trace type specified:
##   Based on info supplied, a 'scatter' trace seems appropriate.
##   Read more about this trace type -> https://plotly.com/r/reference/#scatter
## No scatter mode specifed:
##   Setting the mode to markers
##   Read more about this attribute -> https://plotly.com/r/reference/#scatter-mode

On peut determiner que le flag est :

2021-08-04 a 23h04

Methode numerique avec 2 variables

Meme logique qu’au dessus avec 2 variables

distances = dist(df[-c(1, 4)]) %>%
  as.matrix()
diag(distances) = NA
distanceToClosest = c()
for (r in 1:nrow(distances)) {
  mini = min(distances[r,], na.rm = TRUE)
  distanceToClosest = c(distanceToClosest, mini)
}
df %>% 
  dplyr::mutate(distanceToClosest = distanceToClosest) %>%
  dplyr::arrange(desc(distanceToClosest)) %>%
  head()

On peut donc determiner que le point le plus extreme (flag?) est :

2021-08-04 a 23h04